/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BO;

import DAL.AbstractFactory;
import DAL.DTO.EmployeInterneDTO;
import ERRORS.EmployeInexistantException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author olivierm
 */
public class EmployeInterne extends Employe{

    
    //*******************************************************************
    //Variables
    //*******************************************************************

    //*******************************************************************
    //Constructeurs
    //*******************************************************************    
    
    /**
     * Constructeur utilisé pour convertir un employeInterneDTO en 
     * employeInterne
     * @param employeDTO
     */
    private EmployeInterne(EmployeInterneDTO employeDTO){

        Role role = new Role(employeDTO.is_gestionClient(), employeDTO.is_gestionIntervention(), employeDTO.is_gestionPlanning(),
                    employeDTO.is_gestionDirection(), employeDTO.is_gestionOnSite(), employeDTO.is_gestionSys());
        ZoneGeographique zg = new ZoneGeographique(employeDTO.get_idZg(), employeDTO.get_libelleZg());
        Adresse adresse = new Adresse(employeDTO.get_rue(), employeDTO.get_numero(), employeDTO.get_cp(), employeDTO.get_ville(), zg);
        
        this.setNom(employeDTO.get_nom());
        this.setPrenom(employeDTO.get_prenom());
        this.set_matricule(employeDTO.get_matricule());
        this.set_role(role);
        this.setAdresse(adresse);
    }
    
    /**
     * Constructeur utilisé pour la seconde phase dans le processus de login d'un
     * employé interne
     * @param matricule
     */
    public EmployeInterne (String matricule){
        try {
            EmployeInterneDTO employeDTO;
            employeDTO = AbstractFactory.getInstance().getEmployeDao().rechercherEmployeInterne(matricule);
            CreerEmployeInterne(employeDTO);
        } catch (EmployeInexistantException ex) {
            Logger.getLogger(EmployeInterne.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    } 
    
    /**
     * Constructeur utilisé pour la création d'un nouvel employé (login)
     * @author olivierm
     * @param nom (référencé par la classe personne)
     * @param prenom (référencé par la classe personne)
     * @param adresse (référencé par la classe personne)
     * @param matricule (référencé par la classe Employe)
     * @param password (référencé par la classe Employe)
     * @param role (référencé par la classe Employe)
     */
    public EmployeInterne(String nom, String prenom, Adresse adresse, String matricule, String password, Role role) {
        super(nom, prenom, adresse, matricule, password, role);
    }
    
    /**
     * Méthode créant un employeInterneDTO sur base des champs d'un employeInterne
     * @return
     */
    private EmployeInterneDTO CreerEmployeInterneDTO(){
        return new
                EmployeInterneDTO(this.getNom(), this.getPrenom(), this.getAdresse().get_rue(), this.getAdresse().get_numero(), this.getAdresse().get_cp(), this.getAdresse().get_ville(),
                                    this.get_role().is_gestionClient(), this.get_role().is_gestionIntervention(), this.get_role().is_gestionPlanning(),
                                    this.get_role().is_gestionDirection(), this.get_role().is_gestionOnSite(), this.get_role().is_gestionSys());
    }
    
    /**
     * Méthode créant un employeInterne sur base des champs d'un employeInterneDTO
     * @param employeDTO
     */
    private void CreerEmployeInterne(EmployeInterneDTO employeDTO){
        Role role = new Role(employeDTO.is_gestionClient(), employeDTO.is_gestionIntervention(), employeDTO.is_gestionPlanning(),
                    employeDTO.is_gestionDirection(), employeDTO.is_gestionOnSite(), employeDTO.is_gestionSys());
        ZoneGeographique zg = new ZoneGeographique(employeDTO.get_idZg(), employeDTO.get_libelleZg());
        Adresse adresse = new Adresse(employeDTO.get_rue(), employeDTO.get_numero(), employeDTO.get_cp(), employeDTO.get_ville(), zg);
        
        this.setNom(employeDTO.get_nom());
        this.setPrenom(employeDTO.get_prenom());
        this.set_matricule(employeDTO.get_matricule());
        this.set_role(role);
        this.setAdresse(adresse);
    }
    //*******************************************************************
    //Getters et Setters
    //*******************************************************************    
    
    //*******************************************************************
    //Méthode d'instance
    //******************************************************************* 
    
    //*******************************************************************
    //Méthode de classe
    //*******************************************************************

}
